Skip to content

Add Native Subsplit Support#1149

Merged
CryZe merged 31 commits into
LiveSplit:masterfrom
CryZe:native-subsplits
Jul 22, 2026
Merged

Add Native Subsplit Support#1149
CryZe merged 31 commits into
LiveSplit:masterfrom
CryZe:native-subsplits

Conversation

@CryZe

@CryZe CryZe commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add native segment-group editing to the run editor, including group selection, naming, icons, movement, and creation/removal
  • render the run editor from the presentation-ready row model exposed by livesplit-core
  • expose and localize the Flat, Current Group Expanded, and All Groups Expanded display modes
  • update the livesplit-core submodule to the merged native subsplit implementation from Add Native Subsplit Support livesplit-core#934

Why

This brings native subsplit support to the web and desktop frontends while keeping group structure, visibility, and presentation decisions in livesplit-core so other frontends can consume the same model.

Validation

  • npm run build:core
  • npm run lint
  • npx prettier@3.8.1 --check on the affected frontend sources
  • npm run publish

CryZe added 26 commits July 4, 2026 22:35
This makes the run editor show segment groups as editable headers with indented split rows, allowing users to create, remove, and rename groups directly from the splits table instead of editing a flat list only.

This also wires the subsplit display mode into the settings UI as a localized combobox and updates the staged livesplit-core submodule with backend-controlled group action availability.
This updates the staged livesplit-core submodule to include the fix for moving whole subsplit groups as coherent sections in the run editor.
This updates the staged livesplit-core submodule to include single-segment subsplit groups and hierarchical scrolling before the timer has a current split.
This makes the run editor draw the same section boundary before an ungrouped segment that follows a segment group as it already draws before group headers.

This also updates the staged livesplit-core submodule with renderer state for hierarchical section separators.
This makes the run editor show automatic segment group names as placeholder text while keeping manually entered group names as explicit input values.

This also wires the subsplit display mode setting labels through the frontend localization table and updates the staged livesplit-core submodule with simpler group name bindings.
This keeps the full segment group selected when editing a group header in the run editor instead of collapsing the selection to the major split.

This also updates the staged livesplit-core submodule with regression coverage for the same selection behavior.
This lets the run editor display and edit explicit segment group icons while showing inherited major-split icons as faint placeholders.

This also updates the staged livesplit-core submodule with group icon support and refined current-group-expanded scrolling behavior.
This makes the Run Editor read each native segment group from its dedicated state list instead of reconstructing group bounds and properties from per-segment metadata. It also keeps explicit names visible when they happen to match their major split's current name.

This updates the Cargo lock for the new core dependency and advances the staged livesplit-core submodule with invariant-preserving structural edits, a multi-group movement guard, and correct group-header icon layout.
@CryZe
CryZe marked this pull request as ready for review July 21, 2026 16:27
CryZe added 2 commits July 22, 2026 12:09
Move segment and group row rendering, selection state, and table-specific controls into focused modules. This keeps the large Run Editor view from accumulating another independent editing subsystem while preserving the existing behavior.
Expire mouse-focus suppression after its originating event so later keyboard navigation always activates the focused segment. Route Ctrl, Command, and Shift group-header selection through livesplit-core so complete group selection follows the same backend rules in every frontend.
Advance livesplit-core to the generalized gap-separator setting. The frontend settings UI now receives the accurate localized label and description while existing serialized layouts continue loading through the core compatibility alias.
@CryZe
CryZe force-pushed the native-subsplits branch from bfe15fb to 8f0821e Compare July 22, 2026 12:52
Handle group-header textbox selection on mouse-down just like segment textboxes, while suppressing only the focus event that will actually occur. This preserves Ctrl, Command, and Shift selection without a timer or stale focus token, keeps keyboard focus exclusively selecting its group, and prevents a successfully deselected group from retaining an editable textbox.
@CryZe
CryZe force-pushed the native-subsplits branch from 8f0821e to 800c0d4 Compare July 22, 2026 15:04
This releases native subsplits throughout LiveSplit One. The updated
`livesplit-core` submodule owns segment group parsing, serialization,
editing operations, and the presentation rows shared by all frontends.
The Run Editor now consumes that backend model to create, rename, select,
reorder, and remove groups without reconstructing group membership in
TypeScript.

The Splits component can present runs flat, expand the current group, or
expand every group. Group headers, scrolling, indentation, section
boundaries, and gap separators are likewise derived from core so the web
frontend stays aligned with other current and future LiveSplit frontends.

Changelog (en): Subsplits are here! Organize detailed segments under clear
group headers while keeping your split list focused on the group you are
currently running. Open Edit Splits, select consecutive segments, and choose
Create Group. The Splits component expands the current group automatically.
Want a different view? Use Subsplit Display Mode in the Layout Editor to show
a flat list or keep every group expanded. Existing splits and layouts that use subsplits are supported automatically.
Changelog (de): Subsplits sind da! Organisiere detaillierte Segmente unter
übersichtlichen Gruppenüberschriften, während sich deine Split-Liste auf die
aktuell laufende Gruppe konzentriert. Öffne „Splits bearbeiten“, markiere
aufeinanderfolgende Segmente und wähle „Gruppe erstellen“ – die
Splits-Komponente zeigt die aktuelle Gruppe automatisch erweitert an. Du
möchtest eine andere Ansicht? Über den „Subsplit-Anzeigemodus“ im
Layout-Editor kannst du eine flache Liste oder alle Gruppen erweitert
anzeigen. Vorhandene Splits und Layouts mit Subsplits werden automatisch unterstützt.
Changelog (fr): Les subsplits sont arrivés ! Organisez vos segments détaillés
sous des en-têtes de groupe clairs tout en gardant la liste centrée sur le
groupe en cours. Ouvrez l'éditeur de splits, sélectionnez des segments
consécutifs, puis choisissez « Créer un groupe » : le composant Splits déplie
automatiquement le groupe actuel. Vous préférez une autre vue ? Utilisez le
« Mode d'affichage des subsplits » dans l'éditeur de layout pour afficher une
liste à plat ou garder tous les groupes dépliés. Les splits et layouts existants utilisant des subsplits sont automatiquement pris en charge.
Changelog (nl): Subsplits zijn er! Orden gedetailleerde segmenten onder
duidelijke groepskoppen terwijl je splitslijst op de huidige groep gericht
blijft. Open de splitseditor, selecteer opeenvolgende segmenten en kies
‘Groep aanmaken’; het onderdeel Splits klapt de huidige groep automatisch
uit. Wil je een andere weergave? Gebruik ‘Weergavemodus voor subsplits’ in de
lay-outeditor om een platte lijst te tonen of alle groepen uitgeklapt te
houden. Bestaande splits en lay-outs met subsplits worden automatisch ondersteund.
Changelog (es): ¡Ya están aquí los subsplits! Organiza los segmentos
detallados bajo encabezados de grupo claros mientras la lista de splits se
centra en el grupo actual. Abre el editor de splits, selecciona segmentos
consecutivos y elige «Crear grupo»; el componente Splits expande
automáticamente el grupo actual. ¿Prefieres otra vista? Usa el «Modo de
visualización de subsplits» en el editor de diseño para mostrar una lista
plana o mantener expandidos todos los grupos. Los splits y diseños existentes que usan subsplits se admiten automáticamente.
Changelog (it): Sono arrivati i subsplit! Organizza i segmenti dettagliati
sotto intestazioni di gruppo chiare, mantenendo l'elenco degli split
incentrato sul gruppo attuale. Apri l'editor degli split, seleziona segmenti
consecutivi e scegli «Crea gruppo»: il componente Splits espande
automaticamente il gruppo attuale. Preferisci un'altra visualizzazione? Usa
la «Modalità di visualizzazione dei subsplit» nell'editor del layout per
mostrare un elenco piatto o mantenere espansi tutti i gruppi. Gli split e i layout esistenti che usano i subsplit sono supportati automaticamente.
Changelog (pt): Os subsplits chegaram! Organiza os segmentos detalhados sob
cabeçalhos de grupo claros, mantendo a lista de splits focada no grupo atual.
Abre o editor de splits, seleciona segmentos consecutivos e escolhe «Criar
grupo»; o componente Splits expande automaticamente o grupo atual. Preferes
outra vista? Usa o «Modo de exibição dos subsplits» no editor de layout para
mostrar uma lista plana ou manter todos os grupos expandidos. Os splits e layouts existentes que usam subsplits são suportados automaticamente.
Changelog (pt-BR): Os subsplits chegaram! Organize os segmentos detalhados sob
cabeçalhos de grupo claros, mantendo a lista de splits focada no grupo atual.
Abra o editor de splits, selecione segmentos consecutivos e escolha «Criar
grupo»; o componente Splits expande automaticamente o grupo atual. Prefere
outra visualização? Use o «Modo de exibição dos subsplits» no editor de
layout para mostrar uma lista plana ou manter todos os grupos expandidos. Os splits e layouts existentes que usam subsplits são compatíveis automaticamente.
Changelog (pl): Subsplity już są! Uporządkuj szczegółowe segmenty pod
czytelnymi nagłówkami grup, pozostawiając listę splitów skupioną na bieżącej
grupie. Otwórz edytor splitów, zaznacz kolejne segmenty i wybierz „Utwórz
grupę”. Komponent Splits automatycznie rozwinie bieżącą grupę. Wolisz inny
widok? Użyj opcji „Tryb wyświetlania podziałów podrzędnych” w edytorze układu,
aby wyświetlić płaską listę lub pozostawić wszystkie grupy rozwinięte.
Istniejące splity i układy korzystające z subsplitów są obsługiwane automatycznie.
Changelog (ru): Подсегменты уже здесь! Организуйте подробные сегменты под
понятными заголовками групп, сохраняя внимание списка сплитов на текущей
группе. Откройте редактор сплитов, выделите последовательные сегменты и
выберите «Создать группу». Компонент Splits автоматически раскроет текущую
группу. Нужен другой вид? В редакторе раскладки используйте «Режим
отображения подсегментов», чтобы показать плоский список или оставить все
группы раскрытыми. Существующие сплиты и раскладки с подсегментами поддерживаются автоматически.
Changelog (ja): サブスプリットが登場しました!詳細なセグメントを分かりやすい
グループ見出しの下にまとめ、スプリット一覧を現在のグループに集中させられます。
スプリットエディタを開き、連続するセグメントを選択して「グループを作成」を選ぶだけで、
Splits コンポーネントが現在のグループを自動的に展開します。別の表示にしたい場合は、
レイアウトエディタの「サブスプリット表示モード」で、フラットな一覧またはすべての
グループを展開する表示を選べます。サブスプリットを使用する既存のスプリットとレイアウトにも自動的に対応します。
Changelog (ko): 이제 하위 스플릿을 사용할 수 있습니다! 세부 세그먼트를 명확한
그룹 머리글 아래에 정리하면서 스플릿 목록이 현재 그룹에 집중되도록 할 수 있습니다.
스플릿 편집기를 열고 연속된 세그먼트를 선택한 다음 «그룹 만들기»를 선택하면 Splits
컴포넌트가 현재 그룹을 자동으로 펼칩니다. 다른 보기를 원하시나요? 레이아웃 편집기의
«하위 스플릿 표시 모드»에서 플랫 목록을 표시하거나 모든 그룹을 펼친 상태로 유지할 수
있습니다. 하위 스플릿을 사용하는 기존 스플릿과 레이아웃도 자동으로 지원됩니다.
Changelog (zh-Hans): 子分段功能现已上线!将详细分段整理到清晰的分组标题下,让分段
列表始终聚焦于当前分组。打开分段编辑器,选中连续的分段并选择“建立群组”,Splits
组件便会自动展开当前分组。想使用其他显示方式?可在布局编辑器的“子分段显示模式”中
选择平铺列表或始终展开全部分组。已有使用子分段的分段和布局也会自动获得支持。
Changelog (zh-Hant): 子分段功能現已推出!將詳細分段整理到清楚的群組標題下,讓分段
清單持續聚焦於目前群組。開啟分段編輯器,選取連續的分段並選擇「建立群組」,Splits
元件便會自動展開目前群組。想使用其他顯示方式?可在版面配置編輯器的「子分段顯示
模式」中選擇平面清單或持續展開所有群組。現有使用子分段的分段和版面配置也會自動獲得支援。
@CryZe
CryZe force-pushed the native-subsplits branch from 025d5c5 to b316e0c Compare July 22, 2026 17:34
@CryZe CryZe added enhancement A new feature or general improvement to LiveSplit One. UI The issue is about the user interface. layout rendering This affects the rendering of LiveSplit layouts. localization An issue with the localization. labels Jul 22, 2026
@CryZe
CryZe merged commit 0b9b334 into LiveSplit:master Jul 22, 2026
4 checks passed
@CryZe
CryZe deleted the native-subsplits branch July 22, 2026 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement A new feature or general improvement to LiveSplit One. layout rendering This affects the rendering of LiveSplit layouts. localization An issue with the localization. UI The issue is about the user interface.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant